define([ "superadmin/js/superadmin-module", "common/js/user-module",
		"ui.router", "common/js/util-module" ], function() {
	var app = angular.module('SuperadminApp',
			[ 'SuperadminModule', 'UserModule', "ui.router", "UtilModule" ]).config(
			function($stateProvider, $urlRouterProvider) {
				$urlRouterProvider.otherwise("/colegios");
				$stateProvider.state("colegios", {
					url : '/colegios',
					templateUrl : '/superadmin/colegios.html',
					controller : 'ColegiosCtrl'
				});

				$stateProvider.state("colegio", {
					templateUrl : '/superadmin/colegio.html',
					url : '/colegio/:idColegio',

				});
				$stateProvider.state("colegio.info", {
					templateUrl : '/superadmin/col-info.html',
					url : '/info',
					controller : 'ColInfoCtrl',
				});

				$stateProvider.state("colegio.usuarios", {
					url : '/usuarios',
					template : '<ui-view/>',
				// templateUrl : '/superadmin/col-usuarios.html',

				});

				_.forEach([ "coordinadores", "secretarios", "profesores" ], function(
						actor) {
					$stateProvider.state("colegio.usuarios." + actor, {
						url : '/' + actor,
						templateUrl : '/superadmin/col-usuarios.html',
						controller : 'ColUsuariosCtrl',
					});
				});
				$stateProvider.state("colegio.ofertaAcademica", {
					url : '/ofertaAcademica',
					template : '<ui-view/>'
				});
				$stateProvider.state("colegio.ofertaAcademica.materias", {
					url : '/materias',
					templateUrl : '/superadmin/col-materias.html',
					controller : 'ColMateriasCtrl'
				});
				$stateProvider.state("colegio.ofertaAcademica.grados", {
					url : '/grados',
					templateUrl : '/superadmin/col-grados.html',
					controller : 'ColGradosCtrl'
				});
				$stateProvider.state("colegio.ofertaAcademica.grado", {
					url : '/grado/:idGrado',
					templateUrl : '/superadmin/col-grado.html',
					controller : 'ColGradoCtrl'
				});

			});

	app.controller('SuperadminCtrl', function($scope, $window, User, $state) {
		$scope.user = User.getMyInfo();
		$scope.isState = function(state) {
			return $state.includes(state);
		}
		$scope.logOut = function() {
			User.logout({}, function() {
				$window.location.href = "/";
			}, function() {
				$window.location.href = "/";
			})
		};
	});

	app.controller('ColegiosCtrl', function($scope, Superadmin, epModal, User,
			epCache, $state) {

		$scope.nuevoColegio = {};

		$scope.constantes = {};
		$scope.constantes.jornadas = epCache.getJornadas();
		$scope.verColegio = function(colegio) {
			$state.transitionTo("colegio", {
				idColegio : colegio.id
			});
		}
		$scope.isState = function(s) {

			return $state.includes(s);
		}
		$scope.nav = {};

		$scope.crearColegio = function() {

			var nuevoColegio = Superadmin.newColegio({}, $scope.nuevoColegio,
					function(data) {
						$scope.colegios.push(nuevoColegio);
						epModal.close('nuevo-colegio');
						$scope.nuevoColegio = {};
					});

		}
		$scope.colegios = Superadmin.getColegios();

	});

	app.controller('ColInfoCtrl', function($scope, epCache, Superadmin,
			$stateParams) {
		console.log($stateParams)
		$scope.colegio = Superadmin.getColegio({
			idColegio : $stateParams.idColegio
		});
		$scope.jornadas = epCache.getJornadas();

	});

	app.controller('ColUsuariosCtrl', function($scope, $window, Superadmin,
			epModal, epCache, $state, $stateParams) {
		console.log($stateParams);
		var crearUsuario = {
			profesores : Superadmin.newProfesor,
			orientadores : Superadmin.newOrientador,
			secretarios : Superadmin.newSecretario,
			coordinadores : Superadmin.newCoordinador
		}[$state.current.name.split(".")[2]];

		var getUsuarios = {
			profesores : Superadmin.getProfesores,
			orientadores : Superadmin.getOrientadores,
			secretarios : Superadmin.getSecretarios,
			coordinadores : Superadmin.getCoordinadores
		}[$state.current.name.split(".")[2]];

		$scope.nuevoUsuario = {};

		$scope.crearUsuario = function() {
			var idColegio = $stateParams.idColegio;
			var nuevoUsuario = $scope.nuevoUsuario;
			var colUsers = $scope.colUsers;
			nuevoUsuario = crearUsuario({
				idColegio : idColegio
			}, nuevoUsuario, function() {
				$scope.usuarios.push(nuevoUsuario);
				epModal.close('nuevo-usuario');
			});

			$scope.nuevoUsuario = {};
		}

		$scope.usuarios = getUsuarios({
			idColegio : $stateParams.idColegio
		});

	});
	app.controller('ColMateriasCtrl', function($scope, $stateParams, Superadmin,
			epModal) {

		$scope.materias = Superadmin.getMateriasColegio({
			idColegio : $stateParams.idColegio
		});

		$scope.crearMateria = function() {
			var nuevaMateria = angular.copy($scope.nuevaMateria);
			nuevaMateria.idColegio = $stateParams.idColegio;

			Superadmin.newMateriaColegio({}, nuevaMateria, function(nuevaMateria) {
				$scope.materias.push(nuevaMateria);

				epModal.close("nueva-materia");
				$scope.nuevaMateria = {}
			})

		}
	});

	app.controller('ColGradosCtrl', function($scope, $state, $stateParams,
			Superadmin, epModal) {
		$scope.grados = Superadmin.getGradosColegio({
			idColegio : $stateParams.idColegio
		});

		$scope.crearGrado = function() {
			var nuevoGrado = angular.copy($scope.nuevoGrado);
			nuevoGrado.idColegio = $stateParams.idColegio;

			Superadmin.newGradoColegio({}, nuevoGrado, function(nuevoGrado) {
				$scope.grados.push(nuevoGrado);
				epModal.close("nuevo-grado");
				$scope.nuevoGrado = {}
			})

		}
		$scope.verGrado = function(grado) {
			$state.transitionTo("colegio.ofertaAcademica.grado", {
				idColegio : $stateParams.idColegio,
				idGrado : grado.id
			});
		}

	});
	app.controller('ColGradoCtrl', function($scope, $stateParams, Superadmin,
			epChanging,epLoading) {
		var materiasMap;
		$scope.grado = Superadmin.getGrado({
			idGrado : $stateParams.idGrado
		});

		$scope.gradoChange = function() {
			epChanging($scope, 1300, function() {
				epLoading(Superadmin.updateGrado({
					idGrado : $scope.grado.id
				}, $scope.grado), "div[datos]");
			});
		}

		$scope.materias = Superadmin.getMateriasColegio({
			idColegio : $stateParams.idColegio
		});
		_.sync($scope.grado).then(function() {
			$scope.materiasGrado = Superadmin.getMateriasGrado({
				idGrado : $scope.grado.id,
				idColegio : $stateParams.idColegio
			});
			_.sync($scope.materias, $scope.materiasGrado).then(function() {
				materiasMap = _.indexBy($scope.materias, 'id');
				_.each($scope.materias, function(materia) {
					materia.$selected = false;
				});
				_.each($scope.materiasGrado, function(materia) {
					materiasMap[materia.id].$selected = true;
				});
			});
		})

		$scope.onMateriaGradoChange = function(materia, selected) {
			var materiaGrado = {};
			materiaGrado.idMateria = materia.id;
			materiaGrado.idGrado = $scope.grado.id;
			materiaGrado.idColegio = $stateParams.idColegio;
			if (selected)
				Superadmin.newMateriaGrado({}, materiaGrado, function() {
					materia.$selected = selected;
				});
			else
				Superadmin.deleteMateriaGrado(materiaGrado, {}, function() {
					materia.$selected = selected;
				});
		};

	});

	app.controller('asd',
			function($scope, epCache, $window, Superadmin, epModal) {
				$scope.nuevaMateria = {};
				$scope.nuevoGrado = {};
				var materiasMap = {};

				var gradosMap = {}

				// askjdaksjhdkasjhdaksjdhkasjhdkajsd

				$scope.actualizarMaterias = function() {

					var materiasDisponibles = $scope.materias;
					$scope.materias = [];

				};

			});
	return app;
});
